package com.zhb.lkd.utils;

import cn.hutool.core.convert.NumberWithFormat;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * jwt工具类
 *
 * @author shadow
 */
public class JwtUtils {

    /**
     * 根据用户id生成jwt
     * @param userId 用户id
     * @param time 时间
     * @param key  密钥
     * @return
     */
    public static String createJwt(Integer userId,Long time,String key) {
        Map<String, Object> map = new HashMap<String, Object>() {
            private static final long serialVersionUID = 1L;
            {
                put("userId", userId);
                //15天
                put("expire_time", System.currentTimeMillis() + time);
            }
        };
        //map 加密的key
        String token = JWTUtil.createToken(map, key.getBytes());
        return token;
    }

    /**
     * 校验token
     *
     * @param token
     * @param key 密钥
     * @return
     */
    public static boolean verify(String token, String key) {
        return JWTUtil.verify(token, key.getBytes());
    }

    /**
     * 检测token并且获取存在在其中的用户id
     *
     * @param token
     * @param key 密钥
     * @return 返回jwt中的用户id 返回为空token错误或者失效
     */
    public static Integer parse(String token, String key) {
        boolean verify = verify(token,key);
        if (verify){
            JWT jwt = JWTUtil.parseToken(token);
            NumberWithFormat number = (NumberWithFormat) jwt.getPayload("userId");
            Integer empId = number.intValue();
            return empId;
        }
        return null;
    }
}
